package com.uade.tp.persistencia;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import com.uade.tp.negocio.Seccion;
import com.uade.tp.negocio.view.SeccionView;


public class AdministradorPersistenciaSeccion 
{
	private static AdministradorPersistenciaSeccion pool;
	
	
	private AdministradorPersistenciaSeccion()
	{
		
	}
	public static AdministradorPersistenciaSeccion getInstancia()
	{
		if (pool== null)
			pool =new AdministradorPersistenciaSeccion();
		return pool;
	}
	
	/**
	 * 
	 * @param p
	 */
	public void insert(Seccion p)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{

			
				//Preparar sentencia insert en tabla destino
				String senten = "INSERT INTO seccion (nombreSeccion, especialidad,estado) VALUES (?,?,?)" ;
				PreparedStatement ps = null;
				ps = con.prepareStatement(senten);
				ps.setString(1,p.getNombre());
				ps.setString(2,p.getEspecialidad());
				ps.setString(3, p.isEstado()?"S":"N");
				
				ps.execute();
			
				
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar Seccion: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Seccion: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
	}
	public void update(Seccion p)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "UPDATE Seccion set especialidad = ? where nombreSeccion = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,p.getEspecialidad());
			ps.setString(2,p.getNombre());

			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Modificar Seccion: " + e.getMessage());
				System.out.println("Stack Trace al Modificar Seccion: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
		
	}
	public void delete (Seccion p)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "UPDATE Seccion set estado=? where nombreSeccion = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, p.isEstado()?"S":"N");
			ps.setString(2, p.getNombre());
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Seccion: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Seccion: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      

	}
	public Seccion buscarSeccion(String nombreSeccion)
	{
		Seccion p = null;
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT nombreSeccion,especialidad,estado from Seccion where nombreSeccion = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,nombreSeccion);
			ResultSet result = ps.executeQuery();
			
			

			if (result.next())
			{
				p = new Seccion();
				p.setNombre(result.getString("nombreSeccion"));
				p.setEspecialidad(result.getString("especialidad"));
				p.setEstado(result.getString("estado").equals("S")?true:false);
				p.setProductos(
						AdministradorPersistenciaProductoSeccion.getInstancia().
						obtenerProductos(p));
				
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return p;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Seccion: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Seccion: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return p;
	}
	public int getId(Seccion seccion) {
		
			//Obtener conexion BD 
			Connection con = PoolConnection.getPoolConnection().getConnection();
			
			//Generar sentencia SQL
			try
			{
				//Preparar sentencia insert en tabla destino
				String senten = "SELECT idSeccion from Seccion where nombreSeccion = ?" ;
				PreparedStatement ps = null;
				ps = con.prepareStatement(senten);
				ps.setString(1,seccion.getNombre());
				ResultSet result = ps.executeQuery();
				

				if(result.next()){
					return result.getInt("idSeccion");
				}
				
			
			}
		      catch( SQLException e ) 
		      {
					System.out.println("Mensaje Error al Borrar Seccion: " + e.getMessage());
					System.out.println("Stack Trace al Borrar Seccion: " + e.getStackTrace());
					PoolConnection.getPoolConnection().realeaseConnection(con);
		      }
			return 0;
		}
	public Vector<SeccionView> obtenerSeccionesView() {
		Vector<SeccionView> secciones=new Vector<SeccionView>();
		
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT nombreSeccion,especialidad,estado from Seccion where estado='S'" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				Seccion s = new Seccion();
				s.setNombre(result.getString("nombreSeccion"));
				s.setEspecialidad(result.getString("especialidad"));
				s.setEstado((result.getString("estado").equalsIgnoreCase("S"))?true:false);
				secciones.add(s.getView());
				
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return secciones;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Producto: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Producto: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return secciones;
	}
		

}